Bump mls-rs to the germ-integration pin, and keep APP_DATA_UPDATE pathless - #122
Merged
Conversation
🦋 Changeset detectedLatest commit: 162f652 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
germ-mark
force-pushed
the
llm/bump-mls-rs-germ-integration
branch
from
July 28, 2026 19:41
3f28f8a to
162f652
Compare
Moves the pin from ec69dc25 (germ-shadow-safe-exporter) to b43703fb (germ-integration): upstream main resynced to 09761fa, plus the Germ crypto providers, the recovered cryptokit rpath build fix, the Safe Extensions exporter tree, and attachment CEK derivation. Five pins plus the [patch.crates-io] redirect move together. That commit is CI-green on the fork across ubuntu-latest, macos-26, each-feature, no_std/thumbv6m, mls_build_async, lint and audit. The resync requires one code change. awslabs/mls-rs#364 added MlsRules::custom_proposal_requires_update_path with a default of `true`, so APP_DATA_UPDATE — an attestation that changes no membership — started forcing an updatePath. On the PQ half that means an ML-KEM updatePath rides a commit that must be pathless: the bind commit grew to 4042 B against a 1088 B bound, failing test_bind_pq_commit_is_pathless. TwoMlsRules now overrides the hook to `false`, restoring the behaviour apq was written against. Where a path IS wanted — the FULL commit discharging an owed bind on the classical half — commit_options still pins it explicitly, which is where that decision belongs. Also drops serde entirely: the mls-rs feature and the unused [workspace.dependencies] entry. No .rs file in the workspace references serde and no member crate declares it. mls-rs's serde derives are cfg_attr-attached and never participate in MlsEncode/MlsDecode, so this cannot change the stored format — archiving goes through the crate's own wire structs, untouched here. Verified: apq 51+8+9, two-mls-pq 307 (cryptokit), fmt, taplo and clippy -D warnings clean. Group state written by the old pin still loads (fixtures in mls-rs). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
germ-mark
force-pushed
the
llm/bump-mls-rs-germ-integration
branch
from
July 28, 2026 19:44
162f652 to
548160a
Compare
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves the
mls-rspin fromec69dc25(germ-shadow-safe-exporter) tob43703fb(germ-integration). Five workspace dependency entries plus the[patch.crates-io]redirect move together.Also drops
serdeentirely — themls-rsfeature and the unused[workspace.dependencies]entry. Nothing consumes either: no.rsfile references serde and no member crate declares it. mls-rs's serde derives arecfg_attr-attached and never participate inMlsEncode/MlsDecode, so removing the feature cannot move a byte of the stored format; archiving goes through the crate's own wire structs, untouched here.The fork's
mainwas resynced with upstreamawslabs/mls-rs(now09761fa, +7 commits) and the Germ changes recomposed on top. The new pin adds nothing beyond that recomposition: the crypto providers, a build fix that had been riding the old pin outside any feature branch, the Safe Extensions exporter tree, and attachment CEK derivation. See FORK.md.The one behavioural change
awslabs/mls-rs#364 added
MlsRules::custom_proposal_requires_update_path, documented as "The default implementation returnstrue(conservative: always require a path)."TwoMlsRulescould not override a method that did not exist yet, so after the bumpAPP_DATA_UPDATE— an attestation that changes no group membership — began forcing an updatePath.On the PQ half that means an ML-KEM updatePath rides a commit that must be pathless.
test_bind_pq_commit_is_pathlesscaught it: the bind commit grew to 4042 B against a 1088 B bound (one ML-KEM-768 ciphertext).TwoMlsRulesnow overrides the hook tofalse. RFC 9420 §12.4 leaves the path at the committer's discretion for a proposal that does not change membership, so this restores the behaviourapqwas written against rather than introducing a policy. Where a path is wanted — the FULL commit discharging an owed bind on the classical half —commit_optionsstill pins it explicitly, which is where that decision belongs.I isolated this before fixing it: the failure reproduces at the exporter-tree tip without any attachment work, and does not reproduce on the old pin. So it comes from the upstream resync, not from the Germ changes layered on it.
Archive compatibility
No change. Group state written by the old pin still loads:
MlsEncode/MlsDecodewas diffed between the two pins — 467 definitions, field order andcfggates included. The only difference is a new encode-only label struct that is never persisted. Enum discriminants are identical.germ-integrationwas reconstructed after this PR was opened, so every commit id changed. The library tree is byte-identical between the old and new pin — the delta is the CI workflow and FORK.md only — so the verification below still applies.SnapshotandPriorEpochblobs captured from the old pin load on the new one, and are pinned as fixtures in the mls-rs repo. The reverse direction (rollback) was checked too.EPOCH_RETENTION = 3inapq/src/storage.rsis unchanged and still bounds how far epoch history reaches back.Testing
apq51 + 8 + 9 ·two-mls-pq307 withcryptokit·cargo fmt --all --check·taplo fmt --check·cargo clippy -p apq --all-targets -- -D warnings. The upstream pin itself is CI-green on the fork across ubuntu-latest, macos-26, each-feature, no_std/thumbv6m, mls_build_async, lint and audit.Not verified locally: the
awslcfeature path (aws-lc needs go/ninja/nasm on this machine) and the Swift/iOS build. Given the regression above came from a subtle upstream behaviour change, both are worth a look before this ships.